package com.demo.test;

import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Utils {
//  *   1 在成员变量位置 创建一个静态ComboPooledDataSource对象
	private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
	// * 2 在静态d代码块中使用ComboPooledDataSource对象 setxxxx 方法 设置数据库连接
	static {

		try {
			// 设置注册驱动程序
			dataSource.setDriverClass("com.mysql.jdbc.Driver");
			// url
			dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
			// 数据库用户名
			dataSource.setUser("root");
			// 数据库用密码
			dataSource.setPassword("root");

		} catch (PropertyVetoException e) {
			e.printStackTrace();
		}
	}

	public static DataSource getDataSource(){
		return dataSource;
	}
	
	// * 3 定义一个静态方法ComboPooledDataSource对象中获得数据库连接Connection
	public static Connection getConnection() {
		try {
			return dataSource.getConnection();
		} catch (SQLException e) {
			throw new RuntimeException("数据库连接失败" + e);
		}
	}

	// * 4 释放资源
	public static void close(ResultSet rs, Statement state, Connection conn) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (state != null) {
			try {
				state.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();// 归还
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

	}
}
